/*
 * Allwinner SoCs display driver.
 *
 * Copyright (C) 2016 Allwinner.
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2.  This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */

#ifndef __DISP_EINK_DATA_H__
#define __DISP_EINK_DATA_H__

#include "../include.h"
#ifdef EINK_DRIVER		/* if you have eink driver, pls define this macro */
#include "../disp_eink.h"
#endif


#define     EINK_PANEL_W            800
#define     EINK_PANEL_H            600

#define     EINK_LSL                10
#define     EINK_LBL                4
#define     EINK_LDL                (EINK_PANEL_W/4)        /* 1024/4 = 256, */
#define     EINK_LEL                44
#define     EINK_HYNC               (EINK_LSL+EINK_LBL+EINK_LEL)   /* 58 */

#define     EINK_FSL                5
#define     EINK_FBL                4
#define     EINK_FDL                EINK_PANEL_H                   /* 758 */
#define     EINK_FEL                12
#define     EINK_VYNC               (EINK_FSL+EINK_FBL+EINK_FEL)   /* 20 */

#define     EINK_LCD_W              (EINK_LDL+EINK_HYNC)	/* 256+58=314 */
#define     EINK_LCD_H              (EINK_FDL+EINK_VYNC)	/* 758+20=778 */

#define     EINK_WF_WIDTH           EINK_LCD_W		/* 314 */
#define     EINK_WF_HEIGHT          EINK_LCD_H		/* 778 */

#if 0

#ifndef EINK_DRIVER
struct eink_timing_param {
	unsigned int lbl; /*  */
	unsigned int lel; /*  */
	unsigned int lsl;
	unsigned int fbl; /*  */
	unsigned int fel; /*  */
	unsigned int fsl; /*  */
	unsigned int width;  /* image width */
	unsigned int height;  /* image height */
};
#endif
#endif
/************A13 TCON INTERFACE********
D23->STV
D22->CKV
D21->STH
D20->OEH
D15->MODE
D13->LEH

D12->D7
D11->D6
D10->D5
D7->D4
D6->D3
D5->D2
D4->D1
D3->D0
*************************************/
typedef union {
	__u32 dwval;
	struct {
		__u32 res0              :  3;    /* D0~D2 */
		__u32 d0		:  1;    /* D3 */
		__u32 d1		:  1;    /* D4 */
		__u32 d2		:  1;    /* D5 */
		__u32 d3		:  1;    /* D6 */
		__u32 d4		:  1;    /* D7 */

		__u32 res1              :  2;    /* D8~D9 */
		__u32 d5		:  1;    /* D10 */
		__u32 d6		:  1;    /* D11 */
		__u32 d7		:  1;    /* D12 */
		__u32 leh		:  1;    /* D13 */
		__u32 res2		:  1;    /* D14 */
		__u32 mode		:  1;	  /* D15 */

		__u32 res3		:  4;    /* D16~D19 */
		__u32 oeh		:  1;    /* D20 */
		__u32 sth		:  1;    /* D21 */
		__u32 ckv		:  1;    /* D22 */
		__u32 stv		:  1;    /* D23 */

		__u32 res4              :  8;    /* D24~D31 */
	} bits;
} A13_WAVEDATA;

/************8DATA TCON INTERFACE********
D15->D7
D14->D6
D13->D5
D12->D4
D11->D3
D10->D2
D9->D1
D8->D0

D5->STV
D4->CKV
D3->STH
D2->LEH
D1->OEH
D0->MODE
****************************************/
typedef union {
	__u16 dwval;
	struct {
		__u16 mode              :  1;    /* D0 */
		__u16 oeh		:  1;     /* D1 */
		__u16 leh		:  1;    /* D2 */
		__u16 sth		:  1;     /* D3 */
		__u16 ckv		:  1;     /* D4 */
		__u16 stv		:  1;     /* D5 */
		__u16 res0	        :  2;    /* D6~D7 */

		__u16 d0		:  1;    /* D8 */
		__u16 d1		:  1;    /* D9 */
		__u16 d2		:  1;    /* D10 */
		__u16 d3		:  1;    /* D11 */
		__u16 d4		:  1;    /* D12 */
		__u16 d5		:  1;    /* D13 */
		__u16 d6		:  1;    /* D14 */
		__u16 d7		:  1;    /* D15 */
	} bits;
} WAVEDATA_8;


/************16DATA TCON INTERFACE********
D23->D15
D22->D14
D21->D13
D20->D12
D19->D11
D18->D10
D17->D9
D16->D8

D15->D7
D14->D6
D13->D5
D12->D4
D11->D3
D10->D2
D9->D1
D8->D0

D5->STV
D4->CKV
D3->STH
D2->LEH
D1->OEH
D0->MODE
****************************************/

typedef union {
	__u32 dwval;
	struct {
		__u32 mode              :  1;    /* D0 */
		__u32 oeh		:  1;     /* D1 */
		__u32 leh		:  1;    /* D2 */
		__u32 sth		:  1;     /* D3 */
		__u32 ckv		:  1;     /* D4 */
		__u32 stv		:  1;     /* D5 */
		__u32 res0	        :  2;    /* D6~D7 */

		__u32 d0		:  1;    /* D8 */
		__u32 d1		:  1;    /* D9 */
		__u32 d2		:  1;    /* D10 */
		__u32 d3		:  1;    /* D11 */
		__u32 d4		:  1;    /* D12 */
		__u32 d5		:  1;    /* D13 */
		__u32 d6		:  1;    /* D14 */
		__u32 d7		:  1;    /* D15 */

		__u32 d8		:  1;    /* D16 */
		__u32 d9		:  1;    /* D17 */
		__u32 d10               :  1;    /* D18 */
		__u32 d11               :  1;    /* D19 */
		__u32 d12               :  1;    /* D20 */
		__u32 d13               :  1;    /* D21 */
		__u32 d14               :  1;    /* D22 */
		__u32 d15               :  1;    /* D23 */

		__u32 res1	        :  8;   /* D24~D31 */
	} bits;
} WAVEDATA_16;

extern int init_eink_ctrl_data_8(unsigned long wavedata_buf,
		struct eink_timing_param *eink_timing_info, unsigned int i);
extern int init_eink_ctrl_data_16(unsigned long wavedata_buf,
		struct eink_timing_param *eink_timing_info);
#endif
